import mouse
import tkinter
from src import static  # https://stackoverflow.com/questions/448271/what-is-init-py-for
import keyboard
import os

tk = tkinter.Tk()
width, height = tk.winfo_screenwidth(), tk.winfo_screenheight()
tk.destroy()
step = """
{{
    "INSTRUCTION_TYPE": "PLACE_TOWER",
    "ARGUMENTS": {{
        "MONKEY": "{0}",
        "LOCATION": [
            {1},
            {2}
        ]
    }}
}}
        """


def find_tower(letter):
    """
    根据给定的字母查找对应的塔。

    参数:
    letter - 一个字符，表示要查找的塔的关键绑定。

    返回值:
    如果找到对应的塔，则返回塔的名称；如果没有找到，则返回None。
    """
    # 遍历所有塔的键绑定，查找与给定字母匹配的塔
    for tower in static.tower_keybinds:
        if static.tower_keybinds[tower] == letter:
            return tower
    # 如果没有找到匹配的塔，返回None
    return None


# 此代码段用于通过键盘输入，获取指定塔的坐标，并将坐标格式化输出。
# 无参数和返回值。

while True:
    # 打印所有塔及其对应的键位绑定
    for tower in static.tower_keybinds:
        print(static.tower_keybinds[tower].upper() + ". " + tower)

    # 提示用户输入塔的键位或输入'O'退出
    print("Press the key of the tower you want the coords for or press O to quit")
    while True:
        # 读取键盘输入，如果输入为塔的键位之一，则退出内层循环
        if keyboard.read_key().lower() in static.tower_keybinds.values():
            letter = keyboard.read_key().lower()
            break
        # 如果输入为'O'，则退出程序
        elif keyboard.read_key().lower() == "o":
            exit()
    # 根据输入的键位查找对应的塔
    tower = find_tower(letter)
    if tower:
        # 提示用户按"P"获取坐标
        print("Press P to get the coords")
        while True:
            # 如果按下"P"键，则获取当前鼠标位置，并计算相对于屏幕的归一化坐标
            if keyboard.is_pressed("p"):
                os.system("cls")  # 清除命令行界面
                x, y = mouse.get_position()
                w_norm, h_norm = x / width, y / height  # 计算归一化坐标
                # 打印坐标信息
                print("Step:")
                print(step.format(tower, w_norm, h_norm))
                # 提示用户按'O'退出或按"P"继续
                print("Press O to quit or P to continue")
                while True:
                    # 如果按下'O'键，则退出程序
                    if keyboard.read_key().lower() == "o":
                        exit()
                    # 如果按下"P"键，则清除命令行界面，准备下一次操作
                    elif keyboard.read_key().lower() == "p":
                        os.system("cls")
                        break
                break
